package VIEW;

import CONTROLLER.*;
import DAO.DaoFuncionario;
import MODEL.Caixa;
import MODEL.Funcionario;
import MODEL.Garcom;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.fxml.JavaFXBuilderFactory;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;

public class ProjetoFinal extends Application {
    private Stage stage;
    private static ProjetoFinal instance;
    private Funcionario funcionario = new Funcionario();
    private Garcom garcom = new Garcom();
    private Caixa caixa = new Caixa();
 
        void paraTudo(){
            try{
              Cozinha2Controller.relogio.stop();  
            }catch(Exception e){}
            
            try{
            CaixaController.relogio.stop();
            }catch(Exception e){}
            try{
                CozinhaController.relogio.stop();
            }catch(Exception e){}
        }
    
    EventHandler<WindowEvent> evClose = new EventHandler<WindowEvent>() {
 
      public void handle(WindowEvent event) {
        final Stage dialog = new Stage();
        Label label =new Label("Deseja fechar?");
        Button okButton = new Button("Sim");
        okButton.setOnAction(new EventHandler<ActionEvent>() {
 
          public void handle(ActionEvent event) {
            paraTudo();
            dialog.close();
          }
        });
        Button cancelButton = new Button("Não");
        cancelButton.setOnAction(new EventHandler<ActionEvent>() {
 
          public void handle(ActionEvent event) {
            stage.show();
            dialog.close();
          }
        });
        FlowPane pane = new FlowPane(10, 10);
        pane.setAlignment(Pos.CENTER);
        pane.getChildren().addAll(okButton, cancelButton);
        VBox vBox = new VBox(10);
        vBox.setAlignment(Pos.CENTER);
        vBox.getChildren().addAll(label, pane);
        Scene scene1 = new Scene(vBox);
        dialog.setScene(scene1);
        
        dialog.show();
        
      }
    };
    
    
    public ProjetoFinal() {
        instance = this;
    }
    
    public static void main(String[] args) {
        launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) throws Exception {
        try {
            DaoFuncionario df = new DaoFuncionario();
            funcionario = df.getFuncionario(1);
            stage = primaryStage;
            gotoLogin();
            stage.show();
        } catch (Exception ex) {
            System.out.println("Erro: ProjetoFinal.start");
        }
    }
    
    public static ProjetoFinal getInstance() {
        return instance;
    }
    public void gotoLogin() {
        try {
            replaceSceneContent("Tela_Inicial.fxml");
            caixa= new Caixa();
            garcom = new Garcom();
            this.caixa.setVendas(0);
            
        } catch (Exception ex) {
            System.out.println("erro: ProjetoFinal.gotoLogin");
        }
    }
    public void fazerLogin(Funcionario funcionario){
        if(funcionario.getCargo().getDescricao().toLowerCase().equals("caixa")){
            this.caixa.setFuncionario(funcionario);
            this.caixa.setVendas(0);
            gotoCaixa();
        }else{
            if(funcionario.getCargo().getDescricao().toLowerCase().equals("garçom")){
                this.garcom.setFuncionario(funcionario);
                gotoCozinha2();
            }
        }
    }
    /**
     *Vai para a tela do Caixa
     */
    public void gotoCaixa() {
        try {
            replaceSceneContent("Tela_Caixa.fxml");
        } catch (Exception ex) {
            System.out.println("erro: ProjetoFinal.gotoCaixa");
        }
    }
    
    public void gotoCozinha2() {
        try {
            replaceSceneContent("Tela_Cozinha2.fxml");        
        } catch (Exception ex) {
            System.out.println("erro: ProjetoFinal.gotoCozinha");
        }
    }
     
     public void gotoCozinha() {
        try {
            replaceSceneContent("Tela_Cozinha.fxml");
        } catch (Exception ex) {
            System.out.println("erro: ProjetoFinal.gotoCozinha");
        }
    }
     
     public void gotoCadastraFuncionario(){
         try {
            replaceSceneContent("Tela_Cadastro_Funcionario.fxml");
        } catch (Exception ex) {
            System.out.println("erro: ProjetoFinal.gotoCozinha");
        }
     }
    
    public void gotoCadastraProdutos() {
        try {
            replaceSceneContent("Tela_Cadastro_Produto.fxml");
        } catch (Exception ex) {
            System.out.println("erro: ProjetoFinal.gotoCadastraProduto");
        }
     }
    
    public void gotoCadastraCategoria(){
         try {
            replaceSceneContent("Tela_Cadastro_Categoria.fxml");
        } catch (Exception ex) {
            System.out.println("erro: ProjetoFinal.gotoCadastraCategoria");
        }
     }
    
    public void gotoCadastraMesa() {
        try {
            replaceSceneContent("Tela_Cadastro_Mesa.fxml");
        } catch (Exception ex) {
            System.out.println("erro: ProjetoFinal.gotoCadastraProduto");
        }
     }
    
    public boolean gotoPedido() {
        try {
            replaceSceneContent("Tela_Pedidos.fxml");
            return true;
        } catch (Exception ex) {
            System.out.println("erro: ProjetoFinal.gotoPedidos");
            return false;
        }
    }
    
    public boolean gotoAbout() {
        try {
            replaceSceneContent("Tela_About.fxml");
            return true;
        } catch (Exception ex) {
//            Logger.getLogger(ProjetoFinal.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("erro: ProjetoFinal.gotoAbout");
            return false;
        }
    }
            
    public boolean gotoCadastroCliente() {
        try {
            replaceSceneContent("Tela_Cadastro_Cliente.fxml");
            return true;
        } catch (Exception ex) {
            System.out.println("erro: ProjetoFinal.goToCadastroCliente");
            return false;
        }
    }
    
    public boolean gotoAtualizarProduto() {
        try {
            replaceSceneContent("Tela_Atualizar_Produto.fxml");
            return true;
        } catch (Exception ex) {
            System.out.println("erro: ProjetoFinal.goAtualizarProduto");
            return false;
        }
    }
    public boolean gotoCadastraCargo(){
        try{
            replaceSceneContent("Tela_Cadastro_Cargo.fxml");
            return true;
        }catch(Exception e){
            System.out.println("erro: ProjetoFinal.gotoCadastraCargo");
            return false;
        }
        
    }
    
    private Parent replaceSceneContent(String fxml) {
        try{
            paraTudo();
            Parent page = (Parent) FXMLLoader.load(ProjetoFinal.class.getResource(fxml), null, new JavaFXBuilderFactory());
            Scene scene = stage.getScene();
            if (scene == null) {
                scene = new Scene(page);
                stage.setScene(scene);
            } else {
                stage.getScene().setRoot(page);           
            }
            stage.sizeToScene();
            stage.centerOnScreen();
            stage.setOnCloseRequest(evClose);
            return page;
        }catch(Exception e){
            System.out.println("Erro: ProjetoFinal.replaceSceneContent: "+e);
            return null;
        }
    }

    public Funcionario getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }

    public Garcom getGarcom() {
        return garcom;
    }

    public void setGarcom(Garcom garcom) {
        this.garcom = garcom;
    }

    public Caixa getCaixa() {
        return caixa;
    }

    public void setCaixa(Caixa caixa) {
        this.caixa = caixa;
    }
    
    
}
